#define _CRT_SECURE_NO_WARNINGS 1

// class Solution {
// public:
//     vector<int> twoSum(vector<int>& nums, int target) {
//         unordered_map<int,int> hash;
//         for(int i = 0; i < nums.size(); i++)
//         {
//             int n = target - nums[i];
//             if(hash.count(n)) return {hash[n],i};
//             hash[nums[i]] = i;
//         }
//         return {-1,-1};
//     }
// };

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hash;
        for (int i = 1; i < nums.size(); i++)
        {
            int n = target - nums[i];
            for (int j = i - 1; j >= 0; j--)
            {
                if (nums[j] == n)
                {
                    return { j, i };
                }
            }
        }
        return { -1,-1 };
    }
};

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if (s1.size() != s2.size())
            return false;
        int hash[26] = { 0 };
        for (int i = 0; i < s1.size(); i++)
        {
            hash[s1[i] - 'a']++;
        }
        for (int i = 0; i < s2.size(); i++)
        {
            if (--(hash[s2[i] - 'a']) < 0)
                return false;
        }
        return true;
    }
};

class Solution {
public:
    bool my_abs(int i, int j, int k)
    {
        int max = i, min = j;
        if (i < j)
        {
            max = j; min = i;
        }
        return (max - min) <= k ? true : false;
    }
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int, int> hash;
        for (int i = 0; i < nums.size(); i++)
        {
            if (hash.count(nums[i]))
            {
                if (my_abs(hash[nums[i]], i, k)) return true;
            }
            hash[nums[i]] = i;
        }
        return false;
    }
};